package com.shangke.corejava.ch7.inter;

public class TestInterface {
	public static void main(String[] args) {
		//IFly fly=new IFly();-- 接口不能被实例化，不能使用new关键词实例化对象
		
		String name=IFly.wings;
		
		//。向上转型，自动转换类型：把子类对象赋值给父类，或父接口引用
		IFly fly=new Animal();
		fly.fly();
		fly.sing();
		//fly.run;   --。这句语句出错，只接受父类定义的方法。即子类比父类或父接口多的方法，不能引用
		
		Object object=new Object();
		
		//Animal animal=object;   -- 语句出错。父类对象不能直接赋值给子类引用
//		Animal animal=(Animal)object;//父类对象需要强制转换，才能赋值给子类运用
//		animal.sing();
//		
//		Animal animal2=(Animal)fly;//向下类型转换，需要进行类型强制转换；类型强制转换的本质是类型还原
//		animal2.sing();
//		
		//。先向上转换，再向下转换
		
		//instanceof 运算符一般用于类型强制转换前，进行类型判断使用
		if(object instanceof Animal) {
			Animal animal1=(Animal)object;//父类对象需要强制转换，才能赋值给子类运用
			animal1.sing();
		}else {
			System.out.println("不是类型还原，不能进行强制转换");
		}
		
		//。向下类型转换
		if (object instanceof Animal) {
			Animal animal2=(Animal)fly;
			animal2.sing();
		}else {
			System.out.println("不是类型还原，不能进行强制转换2");
		}
		
	}
	
	//。一个类可以实现多个接口，实现接口使用implements关键词
	//。语法：class 类名   implements 接口名    {类主体}
	class MyFly implements IFly{

		@Override
		public void fly() {
			
		}
		
	}
}
